#ifndef SETTINGSFUNCTIONS_HPP
#define SETTINGSFUNCTIONS_HPP

#include "settingsImport.hpp"
#include "sweSolver.hpp"

#include "tinyxml2.h"

namespace hms
{

namespace xml = tinyxml2;

std::shared_ptr<log::logger> createLogger( Settings& s );

template<typename Format>
bool decideImport(
	const ImportSettings::ImportItem<Format>& item,
	const fs::path& otherFile,
	bool otherIsDummy = false
);

void setDerivedPaths( Settings& );

void setBlocksize( MeshVariant& meshVar, const SWESettings& sweSettings );

template<typename MeshType>
void setBlocksizes( SWESolver<MeshType>& );

void printTimeSettings( const Time&, log::logger& );

template<typename MeshType>
void printSolverSettings( const SWESolver<MeshType>& );

template<typename MeshType>
void printFieldProperties( const SWESolver<MeshType>& );

SWESolverVariant createSolver(
	Settings&, const MeshVariant&, const Time&,
	const xml::XMLDocument* domainDoc,
	const xml::XMLDocument* boundaryDoc
);

void printCaseSetup( const Settings&, const SWESolverVariant& );

} // namespace hms

#include "settingsFunctions.tpp"

#endif